package br.com.vti.sisp_sicrim.antigo.controller.tela;

import java.text.SimpleDateFormat;
import java.util.Arrays;
import java.util.Calendar;

import br.com.caelum.vraptor.Result;
import br.com.vti.sisp_sicrim.antigo.controller.programa.FuncoesGerais;
import br.com.vti.sisp_sicrim.antigo.util.Sessao;
import br.com.vti.sisp_sicrim.antigo.util.UtilBean;

/**
 * Classe responsavel por encapsular o tratamento e as consistencias da tela
 * Sistc001
 * 
 * @author Incode - Data: mai/2014
 * 
 */
public class Sistc001 {
	private boolean enviada = false;
	private String pagina = "/resources/antigo/jsp/Sistc001.jsp";
	private String versao;
	private String operacao;
	private int dataCorrente;
	private String horaCorrente;
	private int modulo;
	private String mod1;
	private String conf;
	private String empresa;
	private String nomeClasse;
	private String[] ope0 = new String[15];
	private String[] mod0 = new String[15];
	private String[] fin0 = new String[15];
	private String[] pro0 = new String[15];
	private String[] des0 = new String[15];
	private String[][] dis0 = new String[19][15];
	private int[] atu0 = new int[15];
	private int[] mat0 = new int[15];
	private String[] fun0 = new String[15];
	private String mensagem = "";
	private String funcao = "0";
	private String campofocus = "conf";
	private String navegar = "";
	private Boolean temMensagem = false;
	private Result result;
	private Sessao sessao;
	private FuncoesGerais funcoes = new FuncoesGerais();

	// Classes views
	// Classes includes
	public Sistc001() {
		inicializar(false);
	}

	public Sistc001(boolean primeiraVez, Sessao sessao) {
		this.sessao = sessao;
		inicializar(primeiraVez);
	}

	public void inicializar(boolean primeiraVez) {
		if (primeiraVez) {
			versao = "0";
			operacao = "";
			dataCorrente = 0;
			modulo = 0;
			mod1 = "";
			Arrays.fill(ope0, "");
			Arrays.fill(mod0, "");
			Arrays.fill(fin0, "");
			Arrays.fill(pro0, "");
			Arrays.fill(des0, "");
			Arrays.fill(dis0, "");
			Arrays.fill(atu0, 0);
			Arrays.fill(mat0, 0);
			Arrays.fill(fun0, "");
			conf = "";
			empresa = "";
			nomeClasse = "";
			empresa = sessao.getSisgsisp().getEmpresa();
			operacao = sessao.getSisgsisp().getOperacao();
			versao = sessao.getSisgsisp().getVersao();
		}
		horaCorrente = new SimpleDateFormat("HH:mm:ss").format(Calendar.getInstance().getTime()); // *TIMX
	}

	public boolean receberTela(boolean primeiraVez, Result result) {
		// faz o tratamento das criticas necessarias para os dados da tela
		// recebida
		this.result = result;
		temMensagem = false;
		if (!primeiraVez) {
			return validar();
		} else {
			return true;
		}
	}

	public void enviarTela(boolean primeiraVez, Result result, String origem) {
		this.enviada = true;
		// rotina para enviar a tela
		// caso esteja setado valores para acoesFinais, executa as classes
		// correspondentes
		this.result = result;
		if (UtilBean.acoesFinais != null && !UtilBean.acoesFinais.isEmpty()) {
			UtilBean.processaAcao();
		} else {
			enviar(result, origem);
		}
	}

	public void enviar(Result result, String origem) {
		// redicionar para o jsp correspondente
		UtilBean.redireciona(pagina, result, origem);
	}

	public void enviarMensagem(String campo, String mensagem) {
		// formatar a mensagem de erro, posicionar no campo informa
		if (campo != null) {
			campofocus = campo;
		} else {
			campofocus = "";
		}
		this.mensagem = mensagem;
		temMensagem = true;
		// enviar(result, origem);
	}

	public boolean validar() {
		// validar os campos recebidos da tela
		UtilBean.funcao = this.funcao;
		ValidarConf();
		if (temMensagem) {
			return false;
		}
		ValidarFuncao();
		if (temMensagem) {
			return false;
		}
		ValidarModulo();
		if (temMensagem) {
			return false;
		}
		ValidarOperacao();
		if (temMensagem) {
			return false;
		}
		sessao.getSisgsisp().setEmpresa(this.empresa);
		sessao.getSisgsisp().setOperacao(this.operacao);
		sessao.getSisgsisp().setVersao(this.versao);
		return true;
	}

	private void ValidarFuncao() {
		// Consist�ncia F00funcao
		if (!(UtilBean.funcao.equals(UtilBean.ctt_processa) || UtilBean.funcao.equals(UtilBean.ctt_confirma) || UtilBean.funcao.equals(UtilBean.ctt_retorna) || UtilBean.funcao.equals(UtilBean.ctt_proxima))) {
			enviarMensagem(null, "");
			return;
		}
	}

	private void ValidarOperacao() {
		// Consist�ncia F00OPERACAO
		if (!operacao.equals("COS")) {
			funcoes.sissm001(result, sessao);
		}
	}

	private void ValidarModulo() {
		// Consist�ncia F00MODULO
		// CAMPO MODULO ALTERADO PARA COMBOBOX NO JSP
		// if (sistc001B.getModulo() > 18) {
		// // INPUT 554
		// sistc001.enviarReceberTela(false, result); // POPUP SISTC001
		// // SISTC001
		// if (sistc001B.getModulo() > 18 || sistc001B.getModulo() == 0) {
		// enviarMensagem(null, "MODULO INEXISTENTE");
		// return;
		// }
		// // INPUT 567
		// sistc001.receberTela(false, result);
		// }
	}

	private void ValidarConf() {
		// Consist�ncia F00CONF
		// CAMPO CONF ALTERADO PARA COMBOBOX NO JSP
		// if (!(sistc001.getConf().equals("S") ||
		// sistc001.getConf().equals("N"))) {
		// enviarMensagem(null, "INFORME �S� OU �N� ");
		// return;
		// }
	}

	public String getVersao() {
		return versao;
	}

	public void setVersao(String versao) {
		this.versao = versao;
	}

	public String getOperacao() {
		return operacao;
	}

	public void setOperacao(String operacao) {
		this.operacao = operacao;
	}

	public int getDataCorrente() {
		return dataCorrente;
	}

	public void setDataCorrente(int dataCorrente) {
		this.dataCorrente = dataCorrente;
	}

	public int getModulo() {
		return modulo;
	}

	public void setModulo(int modulo) {
		this.modulo = modulo;
	}

	public String getMod1() {
		return mod1;
	}

	public void setMod1(String mod1) {
		this.mod1 = mod1;
	}

	public String getConf() {
		return conf;
	}

	public void setConf(String conf) {
		this.conf = conf;
	}

	public String getEmpresa() {
		return empresa;
	}

	public void setEmpresa(String empresa) {
		this.empresa = empresa;
	}

	public String getNomeClasse() {
		return nomeClasse;
	}

	public void setNomeClasse(String nomeClasse) {
		this.nomeClasse = nomeClasse;
	}

	public String[] getOpe0() {
		return ope0;
	}

	public void setOpe0(String[] ope0) {
		this.ope0 = ope0;
	}

	public String[] getMod0() {
		return mod0;
	}

	public void setMod0(String[] mod0) {
		this.mod0 = mod0;
	}

	public String[] getFin0() {
		return fin0;
	}

	public void setFin0(String[] fin0) {
		this.fin0 = fin0;
	}

	public String[] getPro0() {
		return pro0;
	}

	public void setPro0(String[] pro0) {
		this.pro0 = pro0;
	}

	public String[] getDes0() {
		return des0;
	}

	public void setDes0(String[] des0) {
		this.des0 = des0;
	}

	public String[][] getDis0() {
		return dis0;
	}

	public void setDis0(String[][] dis0) {
		this.dis0 = dis0;
	}

	public int[] getAtu0() {
		return atu0;
	}

	public void setAtu0(int[] atu0) {
		this.atu0 = atu0;
	}

	public int[] getMat0() {
		return mat0;
	}

	public void setMat0(int[] mat0) {
		this.mat0 = mat0;
	}

	public String[] getFun0() {
		return fun0;
	}

	public void setFun0(String[] fun0) {
		this.fun0 = fun0;
	}

	public String getOpe0(int index) {
		return ope0[index];
	}

	public void setOpe0(int index, String ope0) {
		this.ope0[index] = ope0;
	}

	public String getMod0(int index) {
		return mod0[index];
	}

	public void setMod0(int index, String mod0) {
		this.mod0[index] = mod0;
	}

	public String getFin0(int index) {
		return fin0[index];
	}

	public void setFin0(int index, String fin0) {
		this.fin0[index] = fin0;
	}

	public String getPro0(int index) {
		return pro0[index];
	}

	public void setPro0(int index, String pro0) {
		this.pro0[index] = pro0;
	}

	public String getDes0(int index) {
		return des0[index];
	}

	public void setDes0(int index, String des0) {
		this.des0[index] = des0;
	}

	public int getAtu0(int index) {
		return atu0[index];
	}

	public void setAtu0(int index, int atu0) {
		this.atu0[index] = atu0;
	}

	public int getMat0(int index) {
		return mat0[index];
	}

	public void setMat0(int index, int mat0) {
		this.mat0[index] = mat0;
	}

	public String getFun0(int index) {
		return fun0[index];
	}

	public void setFun0(int index, String fun0) {
		this.fun0[index] = fun0;
	}

	public String getDis0(int index1, int index2) {
		return dis0[index1][index2];
	}

	public void setDis0(int index1, int index2, String dis0) {
		this.dis0[index1][index2] = dis0;
	}

	public String getHoraCorrente() {
		return horaCorrente;
	}

	public void setHoraCorrente(String horaCorrente) {
		this.horaCorrente = horaCorrente;
	}

	public String getFuncao() {
		return funcao;
	}

	public void setFuncao(String funcao) {
		this.funcao = funcao;
	}

	public String getCampofocus() {
		return campofocus;
	}

	public void setCampofocus(String campofocus) {
		this.campofocus = campofocus;
	}

	public String getNavegar() {
		return navegar;
	}

	public void setNavegar(String navegar) {
		this.navegar = navegar;
	}

	public String getMensagem() {
		return mensagem;
	}

	public void setMensagem(String mensagem) {
		this.mensagem = mensagem;
	}

	public void setMensagemSaida(String mensagem) {
		this.mensagem = mensagem;
	}

	public boolean getEnviada() {
		return this.enviada;
	}

	public void setSessao(Sessao sessao) {
		this.sessao = sessao;
	}
}
